/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Dominio;

import disco.HandlerDisk;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author halt
 */
public class GestorReserva implements Serializable {

    List<Reserva> lr;
    HandlerDisk hd;
    GestorCliente gc;
    public GestorReserva() {
        lr = new ArrayList<Reserva>();
        hd = new HandlerDisk();
        try {
            gc = hd.cargarGestorCliente();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(GestorReserva.class.getName()).log(Level.SEVERE, null, ex);
            gc = new GestorCliente();
            gc.saveGestorCliente();
        } catch (IOException ex) {
            Logger.getLogger(GestorReserva.class.getName()).log(Level.SEVERE, null, ex);
            gc = new GestorCliente();
            gc.saveGestorCliente();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(GestorReserva.class.getName()).log(Level.SEVERE, null, ex);
            gc = new GestorCliente();
            gc.saveGestorCliente();
        }
    }

    public void addReserva(int dia, int mes, int ano, int hora, String nombre){
        Reserva r = new Reserva();
        r.setFecha(dia, mes, ano);
        r.setHora(hora);
        r.setNombreReserva(nombre);
        lr.add(r);
        /*POST: solo definimos el identificador de la reserva*/
    }

    public void addReserva(int dia, int mes, int ano, int hora, String nombre,
            String apellido, int telefono, int fototipo, int intensidad, int color,
            float precio, List<Zona> listaZonas, String comentario){
        Reserva r = new Reserva();
        r.setFecha(dia, mes, ano);
        r.setHora(hora);
        r.setNombreReserva(nombre);
        r.setApellido(apellido);
        r.setTelefono(telefono);
        r.setFototipo(fototipo);
        r.setIntensidad(intensidad);
        r.setColor(color);
        r.setPrecio(precio);
        r.setComentario(comentario);
        for (int i = 0; i < listaZonas.size(); ++i) {
            System.out.println("Estoy guardando la zona: " + listaZonas.get(i).id);
            r.agregarZona(listaZonas.get(i));
        }
        boolean b = lr.add(r);
        for (int i = 0; i < lr.size();++i) {
            System.out.println("Nombre reservas: " + lr.get(i).nombreReserva + "FHECA: " +
                    lr.get(i).getDia()+"/"+lr.get(i).getMes()+"/"+lr.get(i).getAno());
        }
        Cliente c = gc.getClienteTelefono(String.valueOf(telefono));
        c.addReserva(r);
        gc.saveGestorCliente();
        System.out.println("Reserva añadida? R: "+ b);
    }

    List<Reserva> buscarReservaFecha(int dia, int mes, int ano) {
        List<Reserva> reservasEnc = new ArrayList<Reserva>();
        int n = lr.size();
        for (int i = 0; i < n; ++i){
            if((dia == lr.get(i).getDia()) && (mes == lr.get(i).getMes())
                    && (ano == lr.get(i).getAno())) {
                reservasEnc.add(lr.get(i));
            }
        }
        return reservasEnc;
    }

    public Reserva buscarReservaHora(int dia, int mes, int ano, int hora) {
        Reserva r = null;
        List<Reserva> reservaDelDia = buscarReservaFecha(dia,mes,ano);
        int n = reservaDelDia.size();
        for (int i = 0; i < n; ++i){
            if (hora == reservaDelDia.get(i).getHora()) r = reservaDelDia.get(i);
        }
        return r;
    }

    public String[][] recogerReservasFecha(int dia, int mes, int ano) {
        List<Reserva> reservas = buscarReservaFecha(dia,mes,ano);
        int n =  reservas.size();
        String[][] reservasS = new String[n][4];
        for (int i = 0; i < n; ++i) {
            reservasS[i][0] = String.valueOf(reservas.get(i).hora);
            reservasS[i][1] = reservas.get(i).nombreReserva;
            reservasS[i][2] = String.valueOf(reservas.get(i).finalizada);
            reservasS[i][3] = String.valueOf(reservas.get(i).precio);
        }
        return reservasS;
    }

    public void borrarReserva(int dia, int mes, int ano, int hora) {
        Reserva r = this.buscarReservaHora(dia, mes, ano, hora);
        this.lr.remove(r);
        
    }

    public void saveGestorReserva(){
        hd.guardarGestorReserva(this);
    }

    public GestorReserva loadGestorReserva() throws FileNotFoundException, IOException, ClassNotFoundException {
        System.out.println("Voy a cargar todas las reservas");
        return hd.cargarGestorReserva();
    }

}
